package legumes.client.ui.widgets.form.item;

import legumes.client.ui.widgets.utils.Formatters;

import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.FormItemValueFormatter;
import com.smartgwt.client.widgets.form.FormItemValueParser;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.SpinnerItem;
import com.smartgwt.client.widgets.form.validator.FloatPrecisionValidator;
import com.smartgwt.client.widgets.form.validator.FloatRangeValidator;
import com.smartgwt.client.widgets.form.validator.IsFloatValidator;

public class PriceFloatItem extends SpinnerItem {

	public PriceFloatItem() {
		super("Price", "Prix");
		setMin(0.01);
		setMax(1000.00);
		setStep(1);
		setHint("&nbsp;" + Formatters.getCurrentCurrencyAsHtml());
        setWidth(80);
        setWrapTitle(false);
        setEndRow(false);
        setTextAlign(Alignment.RIGHT);
        setValidateOnExit(true);
        setType("float");
        setEditorValueParser(new FormItemValueParser() {
			
			@Override
			public Object parseValue(String value, DynamicForm form, FormItem item) {
				return value!=null ? Formatters.formatPrice( value, false ) : "0.00";
			}
		});
//        FormItemInputTransformer fiit = new FormItemInputTransformer() {
//			
//			@Override
//			public Object transformInput(DynamicForm form, FormItem item, Object value,
//					Object oldValue) {
//				Float f = 0.0f;
//				try{
//					f=Formatters.extractFloat(value);
//				} catch(Exception e_){
//					try{
//						f=Formatters.extractFloat(oldValue);
//					}catch(Exception e2_){
//					}
//				}
//				return f;
//			}
//		};
//        setInputTransformer( fiit );
        
		FormItemValueFormatter fivf = new FormItemValueFormatter() {
			
			@Override
			public String formatValue(Object value, Record record, DynamicForm form,
					FormItem item) {
				return value!=null ? Formatters.formatPrice( value, false ) : "";
			}
		};
        setEditorValueFormatter(fivf);
        
        setFiValidators();
//        setValidateOnChange(true);
//        setInputFormat("#0.00");
        
//        addKeyDownHandler(new KeyDownHandler() {
//			
//			@Override
//			public void onKeyDown(KeyDownEvent event) {
//				if( event.getKeyName().equalsIgnoreCase(",") ){
//					event.cancel();
//					event.getItem().setValue(
//							PriceFloatItem.this.getValueAsString().replaceAll(",", ".") 
//					);
//					event.getItem().fireEvent(event);
//				}
//			}
//		});
	}
	
	private void setFiValidators(){
		FloatPrecisionValidator fpv = new FloatPrecisionValidator();
        fpv.setPrecision(2);
        fpv.setRoundToPrecision(2);
        fpv.setErrorMessage("Les centimes du prix doivent être comprises entre 0 et 99.");
        
        FloatRangeValidator frv = new FloatRangeValidator();
        frv.setMin(0.01f);
        frv.setMax(1000.0f);
        frv.setErrorMessage("Le prix doit être compris entre 1 centimes et 1000 €.");
        
        IsFloatValidator isFloatValidator = new IsFloatValidator();
        isFloatValidator.setErrorMessage("Le nombre doit être un décimal.");
        
//        MaskValidator maskValidator = new MaskValidator();  
//        maskValidator.setMask("^[0-9]+([,.]{1}[0-9]{0,2})?$");  
//        maskValidator.setErrorMessage("Le nombre doit être un décimal.");
        
        setValidators(isFloatValidator, frv, fpv);
	}
}
